<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<script>

// Set是一种新的数据结构
// Set类似于数组，不同的是Set里面的元素是无序的，不能通过下标访问元素，元素必须是唯一
// let s1 = new Set([1,2,3,4]);
// s1.size 成员长度
// s1.add()添加一个值
// s1.delete()删除一个值
// s1.has()判断是否包含某个值
// s1.clear()清空数据
// 遍历Set：
// s1.forEach()
// for/of

// Map是一种新的数据结构
// Map类似于对象，不同的是Map的key可以是任意数据类型
// let m1 = new Map([['a',1],['b',2],['c',3]]);
// let m2 = new Map(Object.entries({a:1,b:2,c:3}));
// m1.size 键值对个数
// m1.set(key,val)添加一个键值对
// m1.delete(key)删除一个键值对
// m1.set(key,val)修改一个key的值
// m1.get(key)获取某个key的值
// m1.has(key)判断是否包含某个key
// m1.clear()清空数据
// 遍历Map:
// m1.forEach()
// for/of

// Symbol表示独一无二的值（唯一的值）
// Symbol值的作用：作为对象的属性名（不会轻易被访问到）
// let s1 = Symbol();
// let s2 = Symbol('age');
// let obj = {
//     name: '小王',
//     [Symbol('age')]: 23,
//     [Symbol('sex')]: '男'
// }
// console.log( obj[Symbol('age')] );// undefined
// let arr = Object.getOwnPropertySymbols(obj);// 获取对象所有Symbol属性名
// console.log( obj[arr[0]] );// 23

// let arr1 = [1,2,3];
// console.log( arr );// 原型上的属性 Symbol(Symbol.iterator)
// let iterator = arr[Symbol.iterator]();
// // Symbol.iterator = Symbol('Symbol.iterator');默认有这个值
// console.log( Symbol.iterator );// Symbol(Symbol.iterator)

// ES6类与继承
// 使用class关键字定义类
// 使用extends关键字实现继承
class Cat{// 类体
    // 构造器函数
    constructor(n){
        this.name = n;// 实例对象的属性
    }
    skill(){// 在 Cat.prototype.skill = function (){}
        console.log( '抓老鼠' );
        this.#haha();
    }
    type = 'animal';// 实例对象的属性
    #hehe = '呵呵';// 私有属性（只在class中能访问）
    #haha(){// // 私有方法（只在class中能访问）
        console.log( this.#hehe );// '呵呵'
    }
    static xixi = '嘻嘻';// 静态属性 Cat.xixi
    static abc(){// 静态方法 Cat.abc()
        console.log( 123 );
    }
}

class Dog extends Cat{
    constructor(c,n){
        // 注意，先调用super方法，才能使用this
        super(n);
        this.color = c;
    }
    say(){
        console.log( '汪汪' );
    }
}

// Object.getOwnPropertySymbols()获取对象所有Symbol属性名
// Object.values()获取对象所有可枚举属性的值
// Object.entries()获取对象所有可枚举属性和值
// Object.is()判断两个值是否全等
// Object.assign()将后面的对象拷贝到第一个对象上（浅拷贝）

</script>
</body>
</html>